package com.example.permissionsystem1_1.businessFunction.controller.converter;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.permissionsystem1_1.businessFunction.controller.entity.reqDto.departmentInfoReqDto.*;
import com.example.permissionsystem1_1.businessFunction.controller.entity.reqDto.userInfoReqDto.*;
import com.example.permissionsystem1_1.businessFunction.controller.entity.rspDto.departmentInfoRspDto.*;
import com.example.permissionsystem1_1.businessFunction.controller.entity.rspDto.userFunctionRecordRspDto.UserFunctionRecordRspDto;
import com.example.permissionsystem1_1.businessFunction.controller.entity.rspDto.userInfoRspDto.*;
import com.example.permissionsystem1_1.businessFunction.service.entity.reqModel.departmentInfoReqModel.*;
import com.example.permissionsystem1_1.businessFunction.service.entity.reqModel.userInfoReqModel.*;
import com.example.permissionsystem1_1.businessFunction.service.entity.rspModel.departmentInfoRspModel.*;
import com.example.permissionsystem1_1.businessFunction.service.entity.rspModel.userFunctionRecordRspModel.UserFunctionRecordRspModel;
import com.example.permissionsystem1_1.businessFunction.service.entity.rspModel.userInfoRspModel.*;
import com.example.permissionsystem1_1.common.businessFunction.BaseControllerConverter;
import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.List;

public class UserInfoControllerConverter extends BaseControllerConverter {
    //1.新增一条记录
    /**
     * 将reqDto转成reqModel
     * @param reqDto
     * @return
     */
    public static UserInfoInsertReqModel convertDtoToModel(UserInfoInsertReqDto reqDto) {
        if( reqDto == null ) {
            return null;
        }
        UserInfoInsertReqModel reqModel = new UserInfoInsertReqModel();
        BeanUtils.copyProperties(reqDto, reqModel);
        return reqModel;
    }

    /**
     * 将rspModel转成rspDto
     * @param rspModel
     * @return
     */
    public static UserInfoInsertRspDto convertModelToDto(UserInfoInsertRspModel rspModel){
        if (rspModel == null) {
            return null;
        }
        UserInfoInsertRspDto rspDto = new UserInfoInsertRspDto();
        BeanUtils.copyProperties(rspModel, rspDto);
        return rspDto;
    }
    //2.新增多条记录
//    public static TestInsertBatchReqModel convertDtoToModel(TestInsertBatchReqDto reqDto) {
//        if( reqDto == null || reqDto.getInsertBatchReqDtos()==null || reqDto.getInsertBatchReqDtos().size()<=0) {
//            return null;
//        }
//        List<TestInsertReqDto> testInsertReqDtos= reqDto.getInsertBatchReqDtos();
//        List<TestInsertReqModel> testInsertReqModels=new ArrayList<>();
//        for (TestInsertReqDto testInsertReqDto:testInsertReqDtos) {
//            testInsertReqModels.add(convertDtoToModel(testInsertReqDto));
//        }
//        TestInsertBatchReqModel reqModel = new TestInsertBatchReqModel();
//        reqModel.setInsertBatchReqModels(testInsertReqModels);
//        return reqModel;
//    }
//    public static TestInsertBatchRspDto convertModelToDto(TestInsertBatchRspModel rspModel){
//        if (rspModel == null) {
//            return null;
//        }
//        TestInsertBatchRspDto rspDto = new TestInsertBatchRspDto();
//        BeanUtils.copyProperties(rspModel, rspDto);
//        return rspDto;
//    }
    //3.根据id删除一条记录
    public static UserInfoDeleteByIdReqModel convertDtoToModel(UserInfoDeleteByIdReqDto reqDto) {
        if( reqDto == null ) {
            return null;
        }
        UserInfoDeleteByIdReqModel reqModel = new UserInfoDeleteByIdReqModel();
        BeanUtils.copyProperties(reqDto, reqModel);
        return reqModel;
    }
    public static UserInfoDeleteByIdRspDto convertModelToDto(UserInfoDeleteByIdRspModel rspModel){
        if (rspModel == null) {
            return null;
        }
        UserInfoDeleteByIdRspDto rspDto = new UserInfoDeleteByIdRspDto();
        BeanUtils.copyProperties(rspModel, rspDto);
        return rspDto;
    }
    //4.根据给定的字段值删除符合条件的多条记录
//    public static TestDeletesReqModel convertDtoToModel(TestDeletesReqDto reqDto) {
//        if( reqDto == null ) {
//            return null;
//        }
//        TestDeletesReqModel reqModel = new TestDeletesReqModel();
//        BeanUtils.copyProperties(reqDto, reqModel);
//        return reqModel;
//    }
//    public static TestDeletesRspDto convertModelToDto(TestDeletesRspModel rspModel){
//        if (rspModel == null) {
//            return null;
//        }
//        TestDeletesRspDto rspDto = new TestDeletesRspDto();
//        BeanUtils.copyProperties(rspModel, rspDto);
//        return rspDto;
//    }
    //5.根据ids批量删除多条记录
//    public static TestDeleteBatchByIdsReqModel convertDtoToModel(TestDeleteBatchByIdsReqDto reqDto) {
//        if( reqDto == null || reqDto.getIds()==null || reqDto.getIds().size()<=0) {
//            return null;
//        }
//        TestDeleteBatchByIdsReqModel reqModel=new TestDeleteBatchByIdsReqModel();
//        BeanUtils.copyProperties(reqDto, reqModel);
//        return reqModel;
//    }
//    public static TestDeleteBatchByIdsRspDto convertModelToDto(TestDeleteBatchByIdsRspModel rspModel){
//        if (rspModel == null) {
//            return null;
//        }
//        TestDeleteBatchByIdsRspDto rspDto = new TestDeleteBatchByIdsRspDto();
//        BeanUtils.copyProperties(rspModel, rspDto);
//        return rspDto;
//    }
    //6.根据id修改一条记录
    public static UserInfoUpdateByIdReqModel convertDtoToModel(UserInfoUpdateByIdReqDto reqDto) {
        if( reqDto == null || reqDto.getId()==null ) {
            return null;
        }
        UserInfoUpdateByIdReqModel reqModel = new UserInfoUpdateByIdReqModel();
        BeanUtils.copyProperties(reqDto, reqModel);
        return reqModel;
    }
    public static UserInfoUpdateByIdRspDto convertModelToDto(UserInfoUpdateByIdRspModel rspModel){
        if (rspModel == null) {
            return null;
        }
        UserInfoUpdateByIdRspDto rspDto = new UserInfoUpdateByIdRspDto();
        BeanUtils.copyProperties(rspModel, rspDto);
        return rspDto;
    }
    //7.根据指定的byTestPo中的属性为选择条件,按照setTestPo中的属性进行修改符合条件的多条记录
//    public static TestUpdatesReqModel convertDtoToModel(TestUpdatesReqDto reqDto) {
//        if( reqDto == null || reqDto.getByReqDto()==null || reqDto.getSetReqDto()==null ) {
//            return null;
//        }
//        TestUpdateByIdReqModel byReqModel=new TestUpdateByIdReqModel();
//        BeanUtils.copyProperties(reqDto.getByReqDto(), byReqModel);
//        TestUpdateByIdReqModel setReqModel=new TestUpdateByIdReqModel();
//        BeanUtils.copyProperties(reqDto.getSetReqDto(), setReqModel);
//
//        TestUpdatesReqModel reqModel = new TestUpdatesReqModel();
//        reqModel.setByReqModel(byReqModel);
//        reqModel.setSetReqModel(setReqModel);
//
//        return reqModel;
//    }
//    public static TestUpdatesRspDto convertModelToDto(TestUpdatesRspModel rspModel){
//        if (rspModel == null) {
//            return null;
//        }
//        TestUpdatesRspDto rspDto = new TestUpdatesRspDto();
//        BeanUtils.copyProperties(rspModel, rspDto);
//        return rspDto;
//    }
    //8.根据指定多个ids,来批量修改多条记录
//    public static TestUpdateBatchByIdsReqModel convertDtoToModel(TestUpdateBatchByIdsReqDto reqDto) {
//        if( reqDto == null || reqDto.getIds()==null || reqDto.getIds().size()<=0 ) {
//            return null;
//        }
//        TestUpdateBatchByIdsReqModel reqModel=new TestUpdateBatchByIdsReqModel();
//        BeanUtils.copyProperties(reqDto, reqModel);
//        return reqModel;
//    }
//    public static TestUpdateBatchByIdsRspDto convertModelToDto(TestUpdateBatchByIdsRspModel rspModel){
//        if (rspModel == null) {
//            return null;
//        }
//        TestUpdateBatchByIdsRspDto rspDto = new TestUpdateBatchByIdsRspDto();
//        BeanUtils.copyProperties(rspModel, rspDto);
//        return rspDto;
//    }
    //9.根据指定id查询一条记录
    public static UserInfoSelectByIdReqModel convertDtoToModel(UserInfoSelectByIdReqDto reqDto) {
        if( reqDto == null || reqDto.getId()==null ) {
            return null;
        }
        UserInfoSelectByIdReqModel reqModel=new UserInfoSelectByIdReqModel();
        BeanUtils.copyProperties(reqDto, reqModel);
        return reqModel;
    }
    public static UserInfoSelectByIdRspDto convertModelToDto(UserInfoSelectByIdRspModel rspModel){
        if (rspModel == null) {
            return null;
        }
        UserInfoSelectByIdRspDto rspDto = new UserInfoSelectByIdRspDto();
        BeanUtils.copyProperties(rspModel, rspDto);
        return rspDto;
    }
    //10.根据指定的条件查询符合条件的多条记录
    public static UserInfoSelectsReqModel convertDtoToModel(UserInfoSelectsReqDto reqDto) {
        if(reqDto==null){
            reqDto=new UserInfoSelectsReqDto();
        }
        UserInfoSelectsReqModel reqModel=new UserInfoSelectsReqModel();
        BeanUtils.copyProperties(reqDto, reqModel);
        return reqModel;
    }
    public static UserInfoSelectsRspDto convertModelToDto(UserInfoSelectsRspModel rspModel){
        if (rspModel == null) {
            return null;
        }

        List<UserInfoSelectByIdRspDto> selectByIdRspDtos=new ArrayList<>();
        List<UserInfoSelectByIdRspModel> selectByIdRspModels=rspModel.getSelectByIdRspModels();
        for (UserInfoSelectByIdRspModel selectByIdRspModel:selectByIdRspModels) {
            selectByIdRspDtos.add(convertModelToDto(selectByIdRspModel));
        }

        UserInfoSelectsRspDto rspDto = new UserInfoSelectsRspDto();
        rspDto.setSelectByIdRspDtos(selectByIdRspDtos);
        return rspDto;
    }
    //11.根据多个id查询多条记录
//    public static TestSelectBatchByIdsReqModel convertDtoToModel(TestSelectBatchByIdsReqDto reqDto) {
//        if(reqDto==null || reqDto.getIds()==null || reqDto.getIds().size()<=0){
//            return null;
//        }
//        TestSelectBatchByIdsReqModel reqModel=new TestSelectBatchByIdsReqModel();
//        BeanUtils.copyProperties(reqDto, reqModel);
//        return reqModel;
//    }
//    public static TestSelectBatchByIdsRspDto convertModelToDto(TestSelectBatchByIdsRspModel rspModel){
//        if (rspModel == null) {
//            return null;
//        }
//
//        List<TestSelectByIdRspDto> selectByIdRspDtos=new ArrayList<>();
//        List<TestSelectByIdRspModel> selectByIdRspModels=rspModel.getSelectByIdRspModels();
//        for (TestSelectByIdRspModel selectByIdRspModel:selectByIdRspModels) {
//            selectByIdRspDtos.add(convertModelToDto(selectByIdRspModel));
//        }
//
//        TestSelectBatchByIdsRspDto rspDto = new TestSelectBatchByIdsRspDto();
//        rspDto.setSelectByIdRspDtos(selectByIdRspDtos);
//        return rspDto;
//    }
    //12.分页查询多条记录
    public static UserInfoSelectPageReqModel convertDtoToModel(UserInfoSelectPageReqDto reqDto) {
        if(reqDto==null){
            return null;
        }
        UserInfoSelectPageReqModel reqModel=new UserInfoSelectPageReqModel();
        BeanUtils.copyProperties(reqDto, reqModel);
        return reqModel;
    }
    public static UserInfoSelectPageRspDto convertModelToDto(UserInfoSelectPageRspModel rspModel){
        if (rspModel == null || rspModel.getSelectByIdPageRspModels()==null) {
            return null;
        }
        UserInfoSelectPageRspDto rspDto=new UserInfoSelectPageRspDto();
        IPage<UserInfoSelectByIdRspModel> ipageModel=rspModel.getSelectByIdPageRspModels();
        List<UserInfoSelectByIdRspModel> selectByIdRspModels=ipageModel.getRecords();
        List<UserInfoSelectByIdRspDto> selectByIdRspDtos=new ArrayList<>();
        if(selectByIdRspModels.size()>0){
            for(UserInfoSelectByIdRspModel selectByIdRspModel:selectByIdRspModels){
                selectByIdRspDtos.add(convertModelToDto(selectByIdRspModel));
            }
        }
        IPage<UserInfoSelectByIdRspDto> ipageDto=new Page<>(ipageModel.getCurrent(), ipageModel.getSize(),ipageModel.getTotal());
        ipageDto.setRecords(selectByIdRspDtos);
        rspDto.setSelectByIdPageRspDtos(ipageDto);
        return rspDto;
    }
    //13.用户登录校验
    public static UserLoginReqModel convertDtoToModel(UserLoginReqDto reqDto) {
        if (reqDto == null || reqDto.getUserName()==null || "".equals(reqDto.getUserName())
                || reqDto.getUserPassword()==null || "".equals(reqDto.getUserPassword())) {
            return null;
        }
        UserLoginReqModel reqModel=new UserLoginReqModel();
        BeanUtils.copyProperties(reqDto, reqModel);
        return reqModel;
    }
    public static UserLoginRspDto convertModelToDto(UserLoginRspModel rspModel){
        if (rspModel == null || rspModel.getUserFunctionRecordRspModels()==null || rspModel.getUserFunctionRecordRspModels().size()<=0) {
            return null;
        }
        List<UserFunctionRecordRspModel> userFunctionRecordRspModels=rspModel.getUserFunctionRecordRspModels();
        UserLoginRspDto rspDto=new UserLoginRspDto();
        List<UserFunctionRecordRspDto> userFunctionRecordRspDtos=new ArrayList<>();
        for (UserFunctionRecordRspModel userFunctionRecordRspModel:userFunctionRecordRspModels) {
            UserFunctionRecordRspDto userFunctionRecordRspDto=new UserFunctionRecordRspDto();
            BeanUtils.copyProperties(userFunctionRecordRspModel, userFunctionRecordRspDto);
            userFunctionRecordRspDtos.add(userFunctionRecordRspDto);
        }
        rspDto.setUserFunctionRecordRspDtos(userFunctionRecordRspDtos);
        BeanUtils.copyProperties(rspModel, rspDto);
        return rspDto;
    }

}
